#ifndef NODO_H
#define NODO_H

#include "othello_cut.h"


class Nodo {
public:
    state_t estado;
    
    Nodo();
    
    Nodo(bool empiezaNegro);

    Nodo(int pos, const Nodo *d);
    
    void Nodo::Set(int pos, const Nodo *nodo);

    bool esTerminal() const;

    /**
     * Este deberia ser la cantidad de fichas de algun jugador.
     */
    int Valor() const;
    
    bool juegaBlanco() const;
    
    bool juegaNegro() const;
    
    void imprimir() const;

    virtual ~Nodo();

    /**
     * Clase para Iterar sobre los hijos de un Nodo.
     */
    class Iterador {
    public:
        /**
         * Funcion que construye un Iterador de Nodo para generar todos los
         * posibles hijos.
         *
         * @param nodo:
         * Nodo a generar los Hijos.
         *
         * @param ordenamientoMax:
         * En caso de que sea posible para el juego, elejir de que modo se
         * van a ordenar los hijos, si es por MAX (true) o por MIN (false).
         */
        Iterador(Nodo *nodo);

        /**
         * Retorna el siguiente hijo que le toca a este iterador sobre el nodo
         * actual, o NULL en caso de no haber mas hijos.
         */
        Nodo *Siguiente();
        
        bool Siguiente(Nodo *nodo);

        virtual ~Iterador();

    private:
        int Actual;
        bool primerGenerado;
        Nodo* nodo;
        
        bool returnNodo(bool nulo, Nodo *nodo);
    };

private:
    bool JugoNegro;

    
};

#endif  /* NODO_H */








